home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-06 / an006a.zip / AN006A.TXT < prev   
Text File  |  1991-01-10  |  39KB  |  831 lines

  1. 286-Based NetWare v2.1x File Service Processes
  2.  
  3. The Final Word
  4.  
  5.  Jason Lamb
  6.  Consultant
  7.  Systems Engineering Division
  8.  
  9. Abstract: 
  10.  
  11. This application note provides an in-depth explanation of File Service
  12. Processes (FSP) under 286-based NetWare v2.1x. This includes ELS Levels I
  13. and II; Advanced, dedicated and nondedicated; and SFT. Because of the way
  14. in which FSPs are allocated, this application note will also provide a
  15. detailed explanation of the RAM allocation in the DGroup data segment under
  16. 286-based NetWare v2.1x.
  17.  
  18. Introduction
  19.  
  20. The following application note is a preliminary excerpt from an upcoming
  21. Novell Systems Engineering Division Research report titled "NetWare
  22. Internals and Structure." The actual report may differ slightly from this
  23. excerpt; however, the content will be the same. As noted in the abstract,
  24. this particular excerpt provides an in-depth explanation of File Service
  25. Processes (FSP) under 286-based NetWare v2.1x. This application note will
  26. also provide a detailed explanation of the RAM allocation in the DGroup
  27. data segment under 286-based NetWare v2.1x.
  28.  
  29. Note that NetWare 386 incorporates a completely different memory scheme
  30. than 286-based NetWare. As a result, none of the discussion of limitations
  31. or memory segments applies to NetWare 386.
  32.  
  33. The most evident problem experienced by users regarding FSPs is a shortage
  34. of them. This problem has recently surfaced because of two reasons. The
  35. first has been the growing tendency toward building bigger and more complex
  36. server configurations. The second has been the addition of functionality
  37. and features to the NetWare operating system (OS). With the shortage of
  38. FSPs has come a variety of explanations for this problem, from both within
  39. and without Novell. While some of these explanations have provided some
  40. partially correct answers, this excerpt provides the actual mechanics and
  41. breakdown of this component of the 286-based NetWare operating system.
  42.  
  43. After reading this report you should be able to understand all the factors
  44. affecting FSP allocation, as well as be able to recognize when a server has
  45. insufficient FSPs. Additionally you will have several options for dealing
  46. with FSP-starved servers.
  47.  
  48. File Service Processes
  49.  
  50. A File Service Process (FSP) is a process running in the NetWare server
  51. that services File Service Packets. These are typically NetWare Core
  52. Protocol (NCP) requests. Workstations, or clients, in a NetWare network
  53. request services from the file server through NCP requests. When a
  54. workstation wants to read a file, the NetWare shell builds a packet with
  55. the appropriate NCP request for reading the correct file, and then sends it
  56. off to the server.
  57.  
  58. At the server, the NCP request is handed off to an FSP. The FSP processes
  59. the NCP request. It is the only process running in the NetWare server that
  60. can process an NCP request. At the server, the FSP processes the NCP
  61. request in one of two ways. It either processes the request immediately, or
  62. it can schedule additional processes that it will use for servicing the
  63. request.
  64.  
  65. Because there are various processes with various lengths of run time that
  66. can be used in the servicing of a workstation's NCP request, FSPs become a
  67. potential bottleneck at the server. The following is an example:
  68.  
  69. A workstation sends an NCP request that asks for a certain block of data to
  70. be read from the server's disk. The FSP servicing the NCP request schedules
  71. the appropriate process to retrieve the information from the disk, and then
  72. instructs this disk process to wake it up when it has the information. The
  73. FSP then goes to sleep waiting for completion of the disk process.
  74.  
  75. If no other FSPs are available to run, no other NCP requests can be
  76. processed until this first request is finished. Until an FSP becomes
  77. available, the server is forced to process lower priority processes (if any
  78. are scheduled to run) until the disk request is completed and the FSP
  79. returns with another request. The server will also delay or ignore any new
  80. NCP requests that come in during this time period.
  81.  
  82. It should be noted that an FSP will only go to sleep when it waits for
  83. information coming back from a disk request. There are typically no other
  84. processes in the NetWare server that the FSP uses which would cause the FSP
  85. to go to sleep.
  86.  
  87. When a server does not have enough FSPs, performance will typically be
  88. degraded, especially in heavy data-movement environments (large file
  89. copies, database environments and so on). The problem that is created was
  90. depicted in the example above. The file server must process the NCP
  91. requests in a more serial fashion than parallel fashion, creating a longer
  92. waiting line for requests.
  93.  
  94. (How many of us have expressed frustration at seeing only one bank teller
  95. servicing the waiting line on a Friday afternoon?)
  96.  
  97. Additionally, because there is only a certain amount of buffer space
  98. available on a server for incoming packets, packets coming in after this
  99. buffer space is filled are trashed. The workstations must then spend more
  100. time resending requests, which reduces performance for the workstation and
  101. also reduces performance for the network due to the increased traffic over
  102. the cable.
  103.  
  104. However, not all degradation can be attributed to a lack of FSPs, even in
  105. heavy data-movement environments. In some instances, bad or intermittent
  106. NICs, either at the server or at another node, can create the very same
  107. performance degradations.
  108.  
  109. You can use FCONSOLE statistics to determine if your server has FSP
  110. problems:
  111.  
  112. The FCONSOLE -> LAN I/O Stats -> File Service Used Route number, which
  113. means the number of File Service Packets that had to wait for an FSP, is
  114. one such statistic. You should note this number at one point in the day
  115. (preferably before major application usage or heavy server utilization),
  116. and then take another reading later (after heavy server utilization).
  117. Subtracting these two numbers will give you a total File Service Used Route
  118. number for this time period.
  119.  
  120. At the same time, you should note the amount of File Service Packets (NCP
  121. requests), (on the same FCONSOLE screen) for both times mentioned above, to
  122. get the number of File Service Packets for this time period. You can then
  123. figure a percentage of File Service Used Route to File Service Packets
  124. ratio. Current information suggests this ratio should not exceed 10
  125. percent.
  126.  
  127. Note that the File Service Used Route counter will roll over at 65,536. If
  128. you notice that your second measurement is less than your first, you will
  129. have rolled over the counter (at least once). You may need to add the
  130. second reading to 65,536 for your adjusted (true) second reading.
  131. Additionally, you should take these readings several times over the course
  132. of the day, or several days, using varying time periods, to see if there
  133. are any radical differences in the percentages. (As a last resort you can
  134. commit someone to continually monitor this particular FCONSOLE screen to
  135. see how many time the File Service Used Route counter does roll over.)
  136.  
  137. The only condition under which this statistic will not give a true reading
  138. of FSP shortages applies if your server is configured with the Racal-
  139. Interlan NP600 NIC and you are using newer drivers supplied by Racal-
  140. Interlan. Due to the way the driver was written it will cause the File
  141. Service Used Route counter to increment for every File Service Packet
  142. delivered to the server, whether an FSP is available or not. Using this
  143. FCONSOLE method to determine FSP shortages will be misleading.
  144.  
  145. Finally, we will see later that attaching an FSP amount to a particular
  146. option is inaccurate. For example, saying that a certain LAN board takes up
  147. two FSPs is inaccurate. What one server's FSP allocation is like can be
  148. radically different from another's. The most accurate information that can
  149. be given for server options is in DGroup bytes used, not FSPs.
  150.  
  151. DGroup Data Segment
  152.  
  153. The DGroup data segment is the most important segment of memory for the
  154. NetWare Operating System. It consists of a single 64KB block of RAM, which
  155. cannot be changed due to how pre-80386 Intel microprocessors segment RAM
  156. into 64KB blocks. This 64KB block of RAM exists (and is required for the
  157. server to even operate) in the smallest as well as the largest of server
  158. configurations. Adding or removing RAM does not affect this block at all.
  159. (Indeed this RAM is part of the Minimum RAM required specification of the
  160. NetWare OS.)
  161.  
  162. The DGroup data segment contains various integral components that serve as
  163. the heart of the NetWare OS. These components are the Global Static Data
  164. area, the Process Stacks area, the Volume and Monitor Tables area, Dynamic
  165. Memory Pool 1 and the File Service Process Buffers area. The reasons that
  166. these components all reside within this 64KB data segment are mostly for
  167. performance advantages. In past versions of NetWare some components were
  168. removed from the DGroup Data segment in order to accommodate increased
  169. functionality as it was added to the OS. However, further removal of
  170. components from this area with the current version of the OS would
  171. necessitate major changes.
  172.  
  173. The Global Static Data area contains all the global variables defined in
  174. the NetWare OS. This area also contains all of the global variables defined
  175. by the network interface card (NIC) drivers and the disk controller (or
  176. VADD) drivers.
  177.  
  178. The Process Stacks area provides stack space for all of the various NetWare
  179. processes.
  180.  
  181. The Volume and Monitor tables contain information for the Monitor screen of
  182. the file server, as well as information on all of the disk volumes mounted
  183. on the server.
  184.  
  185. Dynamic Memory Pool 1 is used by virtually all NetWare processes and
  186. routines as either a temporary or semi-permanent workspace.
  187.  
  188. The File Service Process buffers are the buffers where incoming File
  189. Service Packets are placed. An interesting side note is that FSPs are not a
  190. part of DGroup. However, the number of File Service Process buffers
  191. directly determines how many FSPs are allocated.
  192.  
  193. The following graphic illustrates the five components and their minimum to
  194. maximum RAM allocation:
  195.  
  196. : DGroup Data Segment
  197.  
  198. The following sections of this report will go into more detail on each one
  199. of these DGroup components.
  200.  
  201.  Global Static Data:                                        
  202.      28-39.3KB
  203.  
  204. The Global Static Data area is typically the largest single segment of
  205. DGroup allocated.
  206.  
  207. The Global Static Data area contains all of the global variables defined by
  208. the operating system code. This number has increased not only with each
  209. successive version of the OS, but for most revisions as well. A table of OS
  210. DGroup allocations is included for comparison.
  211.  
  212. This area also contains all of the global variables defined in both the
  213. NetWare network interface card (NIC) drivers and the disk drivers. Tables
  214. for disk and NIC driver DGroup allocations are also included.
  215.  
  216. When loading multiple NIC drivers, the variables are allocated in DGroup
  217. once for each NIC driver. If the same NIC driver is loaded twice, then the
  218. variables are allocated twice. For example if you configure two NE2000s
  219. into the OS, then the DGroup allocation is 812 bytes, (2 times 406 bytes).
  220.  
  221. When loading multiple disk drivers, the variables are also allocated in
  222. DGroup once for each disk driver. However, if the same disk driver is
  223. loaded multiple times, the variables are still only allocated once. For
  224. example, if you configure the ISA disk driver and the Novell DCB driver
  225. into the OS, then the DGroup allocation is 292 plus 783, or 1,075 bytes.
  226. However if you configure two Novell DCBs into the OS, the DGroup allocation
  227. is only 783, and not 1,566 bytes.
  228.  
  229. : Operating System / Disk Driver DGroup Allocation Tables
  230.  
  231. : NIC Driver Code Sizes
  232.  
  233. Determining Global Static Data Allocations
  234.  
  235. You can determine the Global Static Data allocation of any given driver by
  236. using the Novell supplied linker program, NLINK.EXE, to generate a map
  237. file. You simply select the particular object file which corresponds to
  238. either the NIC driver, the disk driver or the NetWare OS object file
  239. desired, and then generate a map file using the following command:
  240.  
  241.                NLINK -m <output file> <object file>
  242.  
  243. for example         NLINK -m scsi.map scsi.obj
  244.  
  245. The map output file would look like the one represented in . The DGroup
  246. Global Static variable allocations will be listed in the first portion of
  247. the file called the Segment Table. Search down the Segment Table listing
  248. until you come upon the line(s) which lists DATA in both the Name and Class
  249. columns. The size in bytes of the allocation will be represented by the
  250. hexadecimal number under the Len (length) column. Simply convert the
  251. hexadecimal number to decimal to get the byte size of the Global Static
  252. Data variables that this particular driver allocates.
  253.  
  254. : NLINK SCSI Map Output File
  255.  
  256. You can also generate a map file for an entire OS by using this same
  257. technique. Simply chain all the object files together in the command line
  258. like the following:
  259.  
  260. NLINK -m net$os.map tts.obj cache.obj ane2000.obj bne2000.obj nullc.obj
  261. nulld.obj scsi.obj
  262.  
  263. This is an example of all the object files that are used to create a
  264. NET$OS.EXE file given this particular configuration. You can see what your
  265. particular configuration is from looking at the existing NET$OS.LNK file
  266. from the AUXGEN diskette. This file will list all of the object files used
  267. when you last generated the OS. The resulting map file is much larger than
  268. the one generated when using a single driver, but it is read in exactly the
  269. same way as shown in .
  270.  
  271. : NLINK NET$OS Map Output File
  272.  
  273.  Process Stacks:                                       
  274.      7-10.5KB
  275.  
  276. There is a stack area allocated for each NetWare server process. Each of
  277. the stacks range from 80 to 1,000 bytes. The following are the stack space
  278. requirements for the NetWare processes:
  279.  
  280. Standard Operating System processes:         7,136 bytes
  281.  
  282. TTS Stack:                                   250 bytes
  283.  
  284. Print Spooler Stack:                         668 bytes
  285.  
  286. (This is allocated once for each port spooled in NETGEN)
  287.  
  288. Note that the print spooler stacks are created for a spooled port that is
  289. defined in NETGEN. Print servers and print queues do not affect FSP
  290. allocation.
  291.  
  292.  Volume & Monitor Tables:                              
  293.      0.2-11.5KB
  294.  
  295. The Monitor table is used by the console to store information required to
  296. display the Monitor screen. This table size is fixed, not configurable.
  297.  
  298. Monitor Table Size:                     84 bytes
  299.  
  300. The Volume table is used to maintain information on each of the disk
  301. volumes mounted on the server. The size of memory allocated for this table
  302. is dependent on the size of the mounted volumes, as well as the amount of
  303. directory entries allocated in NETGEN.
  304.  
  305. Please note that mounted volume size is used for these tables so mirrored
  306. drives are not counted twice. The following is the Volume table memory
  307. requirements:
  308.  
  309. For each volume mounted on the server:            84.00 bytes
  310.  
  311. For each MB of disk space mounted:                1.75 bytes
  312.  
  313. For each 18 directory entries on all volumes:     1.00 byte
  314.  
  315. (These numbers are rounded to the next highest integer.)
  316.  
  317. For example, if you had a server with only one volume (SYS:) mounted, with
  318. a size of 145MB and 9,600 directory entries, the Volume and Monitor tables
  319. would require:
  320.  
  321.  84 + (1*84) + (145*1.75) + (9600/18) bytes of DGroup memory
  322.                              or 956 bytes (rounded up)
  323.  
  324.  Dynamic Memory Pool 1:                           
  325.      16-20.9KB
  326.  
  327. Dynamic Memory Pool 1 (DMP 1) is used by virtually all NetWare processes
  328. and routines as temporary workspace. Workspace from 2 to 1,024 bytes (with
  329. 128 being the average) is allocated to a NetWare process. This workspace is
  330. used, then recovered upon completion.
  331.  
  332. Additionally, there are several NetWare processes and routines that hold
  333. memory allocated out of DMP 1, either on a semi-permanent basis, or until
  334. the process or routine finishes. A table of these semi-permanent DMP 1
  335. allocations is included.
  336.  
  337. If there is no DMP 1 RAM available for a process or routine, the
  338. workstation will likely display "Network Error: out of dynamic workspace
  339. during <operation>," where <operation> refers to the name of the DOS call
  340. being tried. In some instances, with some versions of the OS, running out
  341. of DMP 1 RAM can cause print jobs to either disappear (until more DMP 1 RAM
  342. is released) or be lost completely. It has also been reported that under
  343. some earlier versions of 286-based NetWare, running out of DMP 1 RAM can
  344. cause the server to lock up without displaying an ABEND error message.
  345.  
  346. Please note that references to "dynamic workspace" in an error message can
  347. refer to the unavailability of RAM in either Dynamic Memory Pools 1, 2 or
  348. 3. Use the FCONSOLE => Summary => Statistics screen to determine the exact
  349. memory pool involved.
  350.  
  351. : Semi-Permanent Dynamic Memory Pool 1 Allocations
  352.  
  353. Please note that the DMP 1 allocations marked with an asterisk (*) are, in
  354. practical terms, permanent allocations. To change these allocation requires
  355. some type of server reconfiguration.
  356.  
  357.  File Service Process Buffers:                              
  358.      1.5-12.8 KB
  359.  
  360. The File Service Process buffers are the buffers allocated in DGroup for
  361. incoming File Service Packets. The number of FSP buffers available
  362. determines how many FSPs your server will have in a one to one
  363. relationship. If you have four FSP buffers available, then you will have
  364. four FSPs. The maximum FSPs available for any server configuration is 10.
  365. The following is the breakdown of memory requirements for each FSP buffer:
  366.  
  367. Reply buffer                             94 bytes
  368.  
  369. Workspace                               106 bytes
  370.  
  371. Stack space                             768 bytes
  372.  
  373. Receive buffer                          512-4,096 bytes
  374.  
  375. The total size of the FSP buffer depends on the largest packet size of any
  376. NIC driver configured into the operating system. The exact packet size
  377. constitutes the receive buffer portion of the FSP buffer.
  378.  
  379. For example, if you have configured an Ethernet driver with a packet size
  380. of 1024 bytes, and an ARCNET driver using 4,096 byte packets, then the FSP
  381. buffers for this server will be 5,064 bytes:
  382.  
  383.                (4096 + 768 + 106 + 94)
  384.  
  385. This shows that configuring a server with NIC drivers of different packet
  386. sizes can be very inefficient. You can optimize this by keeping all of the
  387. NIC driver packet sizes the same size.
  388.  
  389. Additional File Service Process Buffer RAM
  390.  
  391. There is also a one-time allocation of a single additional reply buffer of
  392. 94 bytes. Lastly, if any NIC driver configured into the OS supports DMA
  393. access, there may be additional memory that will be set aside, unused.
  394.  
  395. Additional reply buffer                      94 bytes
  396.  
  397. Memory set aside for DMA workaround          0-4,095 bytes
  398.  
  399. This is due to the fact that in some PCs, the DMA chip cannot handle
  400. addresses correctly across physical 64KB RAM boundaries. If the receive
  401. buffer of an FSP buffer straddles a physical 64KB RAM boundary, the OS will
  402. skip the memory (depending on the size of the receive buffer this could be
  403. 0 to 4,095 bytes) and not use it. This problem can be erased by changing to
  404. a non-DMA NIC driver. It is also conceivable that changing the Volume
  405. Tables can shift the data structures enough to avoid this straddling. The
  406. following graphic depicts this workaround.
  407.  
  408. : DMA Workaround
  409.  
  410. : NIC Driver Packet and DGroup Buffer Sizes (bytes)
  411.  
  412. This table shows various NIC drivers, and their packet and FSP buffer
  413. sizes, and whether or not they use DMA. Following tables will show the
  414. exact steps in allocating DGroup RAM, options which have the biggest impact
  415. on DGroup RAM allocation and some steps for alleviating FSP shortages.
  416.  
  417. DGroup RAM Allocation, Troubleshooting and Management
  418.  
  419. DGroup RAM Allocation Process
  420.  
  421. The following is the step-by-step process of allocating RAM in DGroup:
  422.  
  423. 1) The OS first allocates the Global Static Data Area of DGroup. This
  424. includes OS, NIC and disk variables.
  425.  
  426. 2) The Process stacks are allocated.
  427.  
  428. 3) The Volume and Monitor tables are allocated.
  429.  
  430. 4) 16KB is set aside for Dynamic Memory Pool 1.
  431.  
  432. 5) The remaining DGroup RAM is used to set up File Service Process buffers.
  433.  
  434. 6) 94 bytes are set aside as an additional reply buffer.
  435.  
  436. 7) 0-4,095 bytes may be set aside (unused) if any installed NIC driver
  437. supports DMA.
  438.  
  439. 8) The remaining RAM is divided by the total FSP buffer size up to a
  440. maximum of 10.
  441.  
  442. 9) The remaining DGroup RAM that could not be evenly made into an FSP
  443. buffer is added to Dynamic Memory Pool 1.
  444.  
  445. A server configured with an NE2000 NIC and an SMC ARCNET NIC, using the
  446. Novell driver, would require an FSP buffer size of 1,992 which is the FSP
  447. buffer size of the larger packet size NIC. (The NE2000 has a 1,024 byte
  448. packet size as opposed to the 512 byte packet size of the ARCNET card).
  449.  
  450. If after allocating all the prior DGroup data structures, there remain
  451. 7,500 bytes of DGroup available for FSP buffers, the allocation would be as
  452. follows:
  453.  
  454. Subtract 94 bytes from the 7,500 for the one additional reply buffer and
  455. divide the remainder by the 1,992 FSP buffer size. This gives 3 FSP buffers
  456. and a remainder of 1,430 to be added to Dynamic Memory Pool 1. The
  457. following is the computation:
  458.  
  459.      (7500 - 94) / 1992 = 3 with a remainder of 1430
  460.  
  461. Once understanding this process, it becomes very easy to see how close any
  462. particular server is to gaining another FSP.
  463.  
  464. 1) Figure out the FSP buffer size.
  465.  
  466. 2) Take the maximum RAM in Dynamic Memory Pool 1 and subtract it from
  467. 16,384 bytes. (The fixed size of DMP 1.)
  468.  
  469. 3) Subtract that difference from the FSP buffer size.
  470.  
  471. This is how many bytes short that server configuration is from gaining an
  472. additional FSP.
  473.  
  474. For example, if the server configuration has a 1,992 FSP buffer size and
  475. the maximum DMP 1 is 16,804, then you can figure that to get an additional
  476. FSP you would have to free up an additional 1,572 bytes of DGroup. The
  477. following is the computation:
  478.  
  479.      1992 - (16804 - 16384) = 1572
  480.  
  481. Two solutions for this configuration would be the following:
  482.  
  483. Remove three spooled printer ports (3 * 668 = 2004)
  484.  
  485. Or reduce directory entries by 28,296 (28296 / 18 = 1572)
  486.  
  487. Either of these would free up the necessary DGroup RAM; however, if current
  488. DMP 1 RAM usage is close to the current maximum, the best choice would be
  489. the option that leaves you with additional remainder RAM for DMP 1. That
  490. choice would be removing the three spooled printer ports, which gives you
  491. 432 bytes for DMP 1.
  492.  
  493. Troubleshooting
  494.  
  495. The following items have the biggest impact on DGroup RAM allocation. They
  496. are listed in order of importance:
  497.  
  498. 1) NIC driver packet size
  499.  
  500. 2) Amount of disk space mounted and directory entries allocated
  501.  
  502. 3) NIC and disk driver global variables
  503.  
  504. 4) Possible RAM loss to DMA workaround
  505.  
  506. 5) Spooled ports defined in NETGEN
  507.  
  508. 6) TTS
  509.  
  510. The following is the methodology used to define this list:
  511.  
  512. 1) The NIC driver packet size has the most significant impact on the
  513. allocation of FSPs because it determines what divisor is used to allocate
  514. FSP buffers. The larger the packet size, the larger the FSP buffer and the
  515. smaller the amount of FSPs.
  516.  
  517. 2) Disk configurations have the second largest impact on DGroup RAM
  518. allocation. Mounting a single volume of 2GB with 10,000 directory entries
  519. would require 13,584 bytes of DGroup RAM alone.
  520.  
  521. 3) These NIC and disk variables can be significant in size. The Async WNIM
  522. driver alone requires 9,942 bytes of DGroup RAM.
  523.  
  524. 4) The maximum DGroup RAM that can be lost to this workaround is 4,095
  525. bytes.
  526.  
  527. 5) The maximum DGroup RAM that can be allocated to print spooler stacks is
  528. 3,340 bytes.
  529.  
  530. 6) The TTS process stack uses 250 bytes of DGroup RAM. Also, Global Static
  531. Data variables for TTS can run from 142 to 152 additional bytes.
  532.  
  533. DGroup RAM Management Methods
  534.  
  535. 1) Remove spooled ports in NETGEN
  536.  
  537. 2) Decrease directory entries
  538.  
  539. Warning: Before decreasing directory entries, please read the Directory
  540. Entries section later in this report. If you incorrectly reduce your
  541. directory entries, it is possible that it will result in lost files,
  542. directory structures and trustee priveleges.
  543.  
  544. 3) Change NIC drivers to non-DMA ones
  545.  
  546. 4) Decrease NIC driver packet size
  547.  
  548. 5) Remove TTS
  549.  
  550. 6) Decrease disk space
  551.  
  552. 7) Use Dynamic Memory Pool 1 patch for qualified servers
  553.  
  554. Warning: Before using the DMP 1 patch, please read the Dynamic Memory Pool
  555. 1 Patch section later in this report. If you incorrectly use the patch, it
  556. is possible that it will result in a dysfunctional or inoperable server.
  557.  
  558. This order was chosen because the impact on server configurations was
  559. deemed minimal in choice 1 and increases as the list increases. However, it
  560. goes without saying that some of these changes are impossible for certain
  561. configurations. For example, removing spooled printers from your server may
  562. be prohibitive or impossible.
  563.  
  564. TTS removal was placed fifth in this list and merits special mention due to
  565. this fact. Even though you are not using implicit or explicit TTS with your
  566. applications, the NetWare OS will still use TTS services for specific
  567. operations. For example, when TTS is installed, the NetWare OS will make
  568. use of it when performing updates to the NetWare bindery files. In the
  569. event of a server failure, this would protect against corruption due to
  570. incomplete bindery updates.
  571.  
  572. Directory Entries
  573.  
  574. When a 286-based NetWare server sets up a directory entry block based upon
  575. the amount of directory entries defined in NETGEN, it allocates that as one
  576. block. As directory entries are used up (by files, directories and trustee
  577. privileges), the block is filled up sequentially. As the directory entry
  578. block is filled, NetWare keeps track of the peak directory entry used. This
  579. is the highest number entry used in the directory entry block.
  580.  
  581. However, directory entries are added sequentially only as long as prior
  582. directory entries are not deleted. When directory entries are deleted,
  583. holes in the directory entry block are created that are filled by
  584. subsequent new directory entries.
  585.  
  586. : New Server Directory Entry Block
  587.  
  588. : Used Server Directory Entry Block
  589.  
  590. This directory entry block fragmentation is not defragmented either under
  591. NetWare or after running VREPAIR. To determine the amount of directory
  592. block fragmentation, perform the following:
  593.  
  594. 1) Pull up the FCONSOLE => Statistics => Volume Information => (select a
  595. volume) screen.
  596.  
  597. 2) Take the Maximum Directory Entries number and subtract the Peak
  598. Directory Entries Used number from it. This is the number of free directory
  599. entries that can be safely manipulated via NETGEN without loss of files.
  600.  
  601. 3) Next take the Current Free Directory Entries number and subtract the
  602. number from step two. This number is the amount of free directory entries
  603. that are inside your live block of directory entries. This number indicates
  604. how much fragmentation of your directory block exists. The higher
  605. proportion of free directory entries you have inside your live block of
  606. directory entries (the number from step 3) to the ones you have outside
  607. your live block (the number from step 2), represents a more fragmented
  608. directory block.
  609.  
  610. When you down a server and run NETGEN in order to reduce directory entries,
  611. the directory entry block is simply truncated to the new number. NETGEN
  612. does not check to see if directory entries that are about to be deleted are
  613. in use. If you have a fragmented directory block and you reduce the
  614. directory entry block based upon the amount of free directory entries you
  615. have available, it is likely that you will be deleting directory entries
  616. that are in use.
  617.  
  618. This will cause files, directories and trustee privileges that were defined
  619. in those directory entries to be lost. Running VREPAIR reestablishes
  620. directory entries for those lost files and some of the directory structure,
  621. and will save most files in the root directory with names that are created
  622. by VREPAIR. These names are typically something like VF000000.000. For a
  623. more complete description of VREPAIR program, consult section eight,
  624. running the VREPAIR utility, in the SFT/Advanced NetWare 286 Maintenance
  625. manual.
  626.  
  627. If you do not wish to manually defragment the server's directory block by
  628. backing up and then restoring the entire volume, then the only safe number
  629. to use in determining how much you can reduce your directory entries by is
  630. your Peak Directory Entries Used number. You can reduce your total
  631. directory entries to near this number, without loss of files. You can
  632. quickly calculate if manipulating the directory entries will buy your
  633. server any FSPs by checking your Maximum Directory Entries number against
  634. your Peak Directory Entries Used number. The difference between these two
  635. represents the amount of directory entries you can manipulate. You can then
  636. calculate if reducing this number can give you additional FSPs.
  637.  
  638. If you recognize that you have a significant amount of directory block
  639. fragmentation, you can elect to manually defragment it using the following
  640. method:
  641.  
  642. 1) Make a complete backup of the volume(s) whose directory entry block you
  643. wish to defragment.
  644.  
  645. 2) Make a note of how many directory entry blocks you have used.
  646.  
  647. Do this by rerunning FCONSOLE and selecting the Statistics => Volume
  648. Information => (select a volume) screen. Next, take the amount of Maximum
  649. Directory Entries and subtract the number of Current Free Directory Entries
  650. from it. This is the number of directory entries that you have used. In
  651. order to complete a full restore, you will need to allocate at least this
  652. many directory entries in NETGEN.
  653.  
  654. (You can also get this number by running CHKVOL on your volume from the
  655. command line.)
  656.  
  657. You should now calculate how many total directory entries you wish to have.
  658. If you do not have a set number in mind, take the number of used directory
  659. entries and add half again to it. For example, if you have used 6,000
  660. directory entries, allocating 9,000 is a good start.
  661.  
  662. 3) Down the server and rerun NETGEN.
  663.  
  664. 4) Reinitialize the selected volume(s).
  665.  
  666. 5) Reset the number of directory entries to the number you calculated from
  667. step two.
  668.  
  669. 6) Restore your volume(s) from your backup.
  670.  
  671. A final note regarding directory entries concerns NetWare servers that are
  672. being used for Macintosh file storage. Currently, using the Peak Directory
  673. Entry Used number for calculating how many directory entries you may safely
  674. reduce without loss of files, will not work for these servers. This is due
  675. to the fact that when Macintosh files are created on a NetWare server, the
  676. resource fork portion of each Macintosh file does not increment the Peak
  677. Directory Entry Used counter. As a result, the only way to reduce directory
  678. entries for such servers is to use the manual directory block defragment
  679. method outlined above.
  680.  
  681. Dynamic Memory Pool 1 Patch
  682.  
  683. Finally, be aware that Novell has a patch fix for some FSP-starved server
  684. configurations. This patch has been available through LANSWER technical
  685. support for qualified configurations. This is the only Novell supported
  686. method for distributing this patch. This patch is also available from other
  687. sources in an unsupported fashion. Warnings should precede its use.
  688.  
  689. The patch consists of three files, a general purpose debug type program
  690. called PATCH.EXE, a patch file to be used with the PATCH.EXE program and a
  691. README file. You can read the PATCH program instructions for a further
  692. explanation of the PATCH program, by simply running the PATCH.EXE program
  693. without any parameters. The patch program works by taking the patch
  694. instruction file and patching the specified file. The patch instruction
  695. file consists of three lines - a pattern line, an offset and a patch line.
  696. The following is the Novell supplied patch instruction file called
  697. SERVPROC.
  698.  
  699. : Novell Dynamic Memory Pool 1 Patch Instructions
  700.  
  701. The patch program will search the specified file (one of the OS .OBJ files)
  702. for the pattern 8B E0 05 00 1F and will replace the byte 1F with 08.
  703.  
  704. This changes a portion of the fixed size of Dynamic Memory Pool 1. The 1F
  705. bytes represents a fixed size of this portion of DMP 1 of 1F00h or 7,936
  706. bytes. The patch program then changes that byte to 08 which represents a
  707. fixed size of this portion of DMP 1 of 800h or 2,048 bytes. This change
  708. means that DMP 1 will be reduced by 5,888 bytes or about 5.75KB.
  709.  
  710.           (7936 - 2048 = 5888)
  711.  
  712. If you understand the operation of the patch you can change the number of
  713. bytes in the decrease of DMP 1 by changing the patch line of the patch
  714. instruction file. In other words, you can use any value beginning at 1F and
  715. decreasing to 00 in place of the 08. This will decrease DMP 1 in 256 byte
  716. increments as follows:
  717.  
  718.           1E   Decrease DMP 1 by    256 bytes
  719.  
  720.           1D   Decrease DMP 1 by    512 bytes
  721.  
  722.           1C   Decrease DMP 1 by    768 bytes
  723.  
  724.           1B   Decrease DMP 1 by 1,024 bytes
  725.  
  726.           ...
  727.  
  728.           08   Decrease DMP 1 by 5,888 bytes
  729.  
  730.           ...
  731.  
  732.           00   Decrease DMP 1 by 7,936 bytes
  733.  
  734. Remember that the hex number you are changing is the two digit hex number
  735. patch value followed by 00. In the first case you are patching the number
  736. 1F00h (the original value of 7,936 bytes) to 1E00h (or 7,680 bytes).
  737. Subtracting the two gives the difference of 256 bytes.
  738.  
  739. It is conceivable that this patch can be used to increase the fixed size of
  740. this portion of DMP 1. You could increase this fixed size by using numbers
  741. greater than 1F. Again, you would be increasing this fixed size in 256 byte
  742. increments for every single hex number increment above 1F. However, it is
  743. not known if using the patch in this manner will result in an operating
  744. system that will even work. Due to the untested nature of this, as well as
  745. the unknown ramifications to other parts of the operating system, it is
  746. strongly recommended that you do not attempt to increase this portion's
  747. fixed size of DMP 1 with this patch.
  748.  
  749. It is also strongly recommended that you do not alter the patch line
  750. numbers to decrease DMP 1 RAM by a larger value than the one supplied with
  751. the patch. Just as you can produce a server OS that will not run by
  752. attempting to increase DMP 1, you can also produce a server OS that will
  753. not run by attempting to decrease DMP 1 too much.
  754.  
  755. If you have not performed the DGroup RAM calculations and you do not know
  756. exactly what you are gaining in FSPs and losing in DMP 1, you should not
  757. alter the patch. If you do alter the patch value, do the calculations on
  758. paper first and remember the numbers involved.
  759.  
  760. Use the number you calculated from page 17 that told you how many bytes you
  761. were short from gaining an additional FSP. At the minimum, your patch value
  762. must be greater than that number or you will be accomplishing nothing by
  763. patching the OS.
  764.  
  765. The current patch value of 08 was arrived at because it will provide the
  766. following FSP gains in a minimum to maximum range of FSPs:
  767.  
  768. 512KB Packet NIC Drivers           3-4 Additional FSPs
  769.  
  770. 1024KB Packet NIC Drivers          2-3 Additional FSPs
  771.  
  772. 2048KB Packet NIC Drivers          1-2 Additional FSPs
  773.  
  774. 4096KB Packet NIC Drivers          1-2 Additional FSPs
  775.  
  776. The warnings for use of this patch should be self evident by now. If you
  777. run short of Dynamic Memory Pool 1 RAM you will get erratic and sometimes
  778. fatal server behavior. Also, altering the patch numbers is not a guaranteed
  779. or supported function of the patch. These numbers and this explanation were
  780. arrived at based on our understanding of how the patch works, and then by
  781. performing the calculations. If you feel the need to use the patch, you
  782. should use it as it is supplied.
  783.  
  784. Prior to sending a user the patch, LANSWER guarantees that the peak RAM
  785. used of Dynamic Memory Pool 1 is at least 6KB greater than the maximum
  786. allocated. If you receive the patch through other means you should, at the
  787. minimum, check those numbers yourself.
  788.  
  789. Due to the nature of fixes that involve patching the operating system, it
  790. is recommended that you try all prior means of curing an FSP-starved server
  791. before resorting to this fix.
  792.  
  793. Final Notes
  794.  
  795. 286-based NetWare v2.1x was designed on the principal of enhanced client
  796. server computing being the foundation of future computer networking.
  797. Therefore, technologies such as a non-preemptive server OS, disk mirroring,
  798. transaction tracking and hardware independence, all implemented with
  799. exceptional speed and security, formed the basis of the technology and
  800. design that went into 286-based NetWare. The fact that almost all other
  801. current network implementations are now borrowing heavily from these ideas
  802. matters little. The additional fact that more and more users are placing
  803. larger amounts of computer resources into their NetWare LANs only reaffirms
  804. the sound concepts behind the design. However, as with any design,
  805. limitations define the playing field.
  806.  
  807. One conclusion that can be drawn from this report is echoed on the final
  808. page of the SFT NetWare 286 In-Depth Product Definition:
  809.  
  810. "*NOTE: Maximums listed are individual limits. You will not be able to use
  811. these specifications at maximum levels at all times. You may have to
  812. purchase additional hardware to achieve some of these maximums."
  813.  
  814. After understanding the relationship between the separate DGroup RAM
  815. components and the File Service Processes, it becomes evident that setting
  816. up an Advanced NetWare 286 server with 100 workstations, 2GB of disk space
  817. and four NICs, is inadvisable. Many of the limitations for this type of
  818. configuration can be largely attributed to many of the current hardware
  819. limitations.
  820.  
  821. NetWare design technologies remain firmly focused at furthering network
  822. computing. NetWare 386 is the next logical design step. The fact is that
  823. NetWare 386 introduces a completely new memory scheme that renders all of
  824. the current discussion on FSP and DGroup limitations academic. Using a
  825. completely dynamic memory and module management system, NetWare 386 is
  826. beginning to introduce a new set of features and technologies that will
  827. represent the new standard for computer networks. And as the next
  828. generation of computer hardware becomes available, we will find that
  829. NetWare 386 will be ready and waiting.
  830.  
  831.